﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI.WebControls;
using Entidades;

namespace WEB_IUS.Clases
{
    public class PermisosTv
    {
        string msg;
        bool lErrorG;

        iusEntities ctx;
        public List<menu> FindPadres(string modulo)
        {
            var q = from c in ctx.menu
                    where c.PADREID == c.MENUID && c.MODULO.Equals(modulo)
                    select c;
            return q.ToList();

        }
        public void cargarMenu(TreeView tvw, String modulo, String username)
        {
            //     Me._Modulo = Modulo
            tvw.Nodes.Clear();
            using (ctx = new iusEntities())
            {
                List<menu> itemPadres = FindPadres(modulo);

                foreach (menu item in itemPadres)
                {

                    if (item.MENUID == item.PADREID)
                    {
                        TreeNode mnNodo = new TreeNode();
                        mnNodo.Value = item.MENUID;
                        mnNodo.Text = item.TITULO;
                        //mnNodo.ImageUrl = item.IMAGEN;
                        mnNodo.NavigateUrl = item.URL;
                        mnNodo.ShowCheckBox = false;
                        mnNodo.ToolTip = item.DESCRIPCION;
                        tvw.Nodes.Add(mnNodo);
                        AddMenuNodoPorUser(mnNodo, item, username);
                    }
                }

            }
            tvw.ExpandAll();
        }

        public void AddMenuNodoPorUser(TreeNode mnuNodoItem, menu item, string username)
        {
            foreach (menu itemHijo in item.menu1)
            {
                if (itemHijo.MENUID != itemHijo.PADREID)
                {
                    //VALIDAR LOS ROLES
                    // if (this.IsUserInRole(drMenuItem("ROLES").ToString) == true && drMenuItem("habilitado").ToString == "1")

                    TreeNode mnuNewNodeItem = new TreeNode();
                    mnuNewNodeItem.Value = itemHijo.MENUID;
                    mnuNewNodeItem.Text = " " + itemHijo.TITULO;
                    mnuNewNodeItem.ToolTip = itemHijo.ROL;
                    mnuNewNodeItem.ImageUrl = itemHijo.IMAGEN;
                    mnuNewNodeItem.NavigateUrl = item.URL;
                    mnuNewNodeItem.ShowCheckBox = true;
                    //mnuNewMenuItem.Target = item.tar;
                    if (!String.IsNullOrEmpty( itemHijo.ROL))
                    {
                        mnuNewNodeItem.Checked = Roles.IsUserInRole(username, itemHijo.ROL);
                    }
                    mnuNodoItem.ChildNodes.Add(mnuNewNodeItem);
                    //llamada recursiva para ver si el nuevo menú ítem aun tiene elementos hijos.
                    AddMenuNodoPorUser(mnuNewNodeItem, itemHijo, username);
                    //}
                }

            }

        }

        public string AsigPermisosAUser(TreeView Tvw, string username)
        {

            try
            {
                foreach (TreeNode n in Tvw.Nodes)
                {
                    this.AsigOpcionesAUser(n, username);
                    msg = "Se Realizó la Operación Satisfactoriamente";
                    lErrorG = false;
                }
            }
            catch (Exception ex)
            {
                msg = ex.Message;
                lErrorG = true;
            }

            return msg;
        }

        public void AsigOpcionesAUser(TreeNode Tvw, string username)
        {

            foreach (TreeNode Node in Tvw.ChildNodes)
            {
                AsigOpcionesAUser(Node, username);
                string roleName = Node.ToolTip;
                if (!string.IsNullOrEmpty(roleName))
                {
                    if ((Node.Checked == true) & (Roles.IsUserInRole(username, roleName) == false))
                    {
                        Roles.AddUserToRole(username, roleName);
                    }
                    else if ((Node.Checked == false) & (Roles.IsUserInRole(username, roleName) == true))
                    {
                        Roles.RemoveUserFromRole(username, roleName);
                    }
                }
            }
        }

    }
}